/**
 * constructor()方法
 * 1. 类的默认方法,通过new命令生成对象实例时，自动调用该方法。
 * 2. 处理复杂的赋值结构,可以采用【解构+传对象】的方式简化赋值
 */

/**
 * 应用场景
 * 1. 初始化类属性的值或者初始化属性和值,也可以完成复杂的属性赋值逻辑
 * 2. 如果继承父类，要先使用super对父类进行初始化
 * 3. 切记不要在构造函数中加载耗时代码，例如获取网络数据和图形绘制等
 */

// 定义类
class PersonC {
  name
  sex
  constructor(name, sex) {
    console.log('new 对象的时候调用');
    // 初始化属性
    this.name = name
    this.sex = sex
  }
  say(msg) {
    console.log(`个人信息：${this.name}:${this.sex}`);
    console.log('说话：', msg);
  }
}

let pc1 = new PersonC('张三', '男')
console.log(pc1.name); // 张三
console.log(pc1.sex); // 男
pc1.say('你好') // 个人信息：张三:男 说话： 你好

// 解构+传对象初始化属性
class PersonCMult {
  names
  sex
  birthday
  identify
  constructor(user) {
    console.log('new 对象的时候调用');
    /**
     * 普通赋值语法
     * this.name = user.name
     * this.sex = user.sex
     * this.birthday = user.birthday
     * this.identify = user.identify
     */
    // 解构赋值
    ({ 
      name: this.names, 
      sex: this.sex, 
      birthday: this.birthday, 
      identify: this.identify } = user)
  }
}
let userobj1 = {
  name: 'chao00000',
  sex: 'nan',
  birthday: '2002-12-12',
  shenfenzheng: '2343253535422524'
}
let pcm1 = new PersonCMult(userobj1)
console.log(pcm1.names); // chao00000
console.log(pcm1.sex); // nan
console.log(pcm1.birthday); // 2002-12-12
console.log(pcm1.identify); // 2343253535422524